package cn.tedu.order.service.impl;

import cn.tdu.common.feign.CartClient;

import cn.tdu.common.feign.StockClient;
import cn.tdu.common.result.JsonResult;
import cn.tedu.order.mapper.OrderMapper;
import cn.tedu.order.service.OrderService;
import cn.tedu.pojo.param.OrderAddParam;
import cn.tedu.pojo.po.OrderPO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private StockClient stockClient;
    @Autowired
    private CartClient cartClient;
    @Override
    public Boolean addOrder(OrderAddParam orderAddParam) {
        log.info("开始处理订单业务,传入的参数：orderAddParam={}",orderAddParam);
        try {
            //1.减少库存 减少库存的时候，可以从orderAddParam.getProductCode ,orderAddParam.getCount中获取商品编号和数量
            JsonResult stockResult = stockClient.reduceStock(orderAddParam.getProductCode(), orderAddParam.getCount());
            if (stockResult == null && stockResult.getState() != 200){
                log.warn("库存扣减失败，商品编码：{}，数量：{}", orderAddParam.getProductCode(), orderAddParam.getCount());
                return false;
            }
            //2.新增订单到数据库中
            OrderPO orderPO = new OrderPO();
            BeanUtils.copyProperties(orderAddParam,orderPO);
            int orderResult = orderMapper.insert(orderPO);
            log.info("新增订单结果orderResult={}",orderResult);
            if (!(orderResult>=1)){
                log.info("订单没有新增成功");
                // 注意：这里库存已经扣减，但订单未创建成功，可能需要补偿机制
                return false;
            }
            //3.删除购物车中选中的商品  orderAddParam.getProductCode  orderAddParam.getUserId
            JsonResult cartResult = cartClient.deleteCart(orderAddParam.getUserId(), orderAddParam.getProductCode());
            if (cartResult == null && cartResult.getState() != 200){
                log.warn("购物车删除失败，用户ID：{}，商品编码：{}", orderAddParam.getUserId(), orderAddParam.getProductCode());
                // 注意：这里订单已创建，但购物车未删除，可能需要补偿机制
            }
            return  true;
        }catch (Exception e){
            log.error("订单业务处理异常",e);
            return false;
        }
    }
}
